package com.yuelao.yuelao_backend.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yuelao.yuelao_backend.entity.UserLike;

import java.util.List;

/**
 * 用户喜欢Service
 * 重构说明：从UserRelationship拆分出来，专门处理用户喜欢功能
 */
public interface UserLikeService extends IService<UserLike> {

    /**
     * 喜欢用户（普通like）
     * @param userId 当前用户ID
     * @param likedUserId 被喜欢的用户ID
     * @return 是否成功，如果互相喜欢则返回配对信息
     */
    boolean likeUser(Long userId, Long likedUserId);

    /**
     * 超级喜欢用户（super like）
     * @param userId 当前用户ID
     * @param likedUserId 被喜欢的用户ID
     * @return 是否成功
     */
    boolean superLikeUser(Long userId, Long likedUserId);

    /**
     * 取消喜欢
     * @param userId 当前用户ID
     * @param likedUserId 被喜欢的用户ID
     * @return 是否成功
     */
    boolean unlikeUser(Long userId, Long likedUserId);

    /**
     * 检查是否喜欢某用户
     * @param userId 当前用户ID
     * @param likedUserId 被喜欢的用户ID
     * @return 是否喜欢
     */
    boolean hasLiked(Long userId, Long likedUserId);

    /**
     * 检查是否互相喜欢
     * @param userId1 用户1
     * @param userId2 用户2
     * @return 是否互相喜欢
     */
    boolean isMutualLike(Long userId1, Long userId2);

    /**
     * 获取我喜欢的人列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页数量
     * @return 喜欢的用户ID列表
     */
    List<Long> getMyLikes(Long userId, int page, int size);

    /**
     * 获取喜欢我的人列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页数量
     * @return 喜欢我的用户ID列表
     */
    List<Long> getWhoLikesMe(Long userId, int page, int size);

    /**
     * 统计我喜欢的人数
     * @param userId 用户ID
     * @return 总数
     */
    long countMyLikes(Long userId);

    /**
     * 统计喜欢我的人数
     * @param userId 用户ID
     * @return 总数
     */
    long countWhoLikesMe(Long userId);

    /**
     * 统计互相喜欢的人数
     * @param userId 用户ID
     * @return 总数
     */
    long countMutualLikes(Long userId);

    /**
     * 统计超级配对数量
     * @param userId 用户ID
     * @return 超级配对数量
     */
    long countSuperMatches(Long userId);

    /**
     * 统计被超级喜欢的人数
     * @param userId 用户ID
     * @return 被超级喜欢的总数
     */
    long countWhoSuperLikesMe(Long userId);
}

